{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "44cb4229",
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4bda1a41",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "        <style>\n",
       "        .output_wrapper, .output {\n",
       "            height:auto !important;\n",
       "            max-height:100000px;\n",
       "        }\n",
       "        .output_scroll {\n",
       "            box-shadow:none !important;\n",
       "            webkit-box-shadow:none !important;\n",
       "        }\n",
       "        </style>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#format the book\n",
    "import book_format\n",
    "book_format.set_style()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd58cfbb",
   "metadata": {},
   "source": [
    "我还在考虑如何写这一章。 与此同时，克利夫兰州立大学的 Dan Simon 教授在这里做了一个易于理解的介绍：\n",
    "\n",
    "http://academic.csuohio.edu/simond/courses/eec641/hinfinity.pdf\n",
    "\n",
    "一句话，$H_\\infty$ (H infty$) 过滤器就像一个卡尔曼过滤器，但它在面对非高斯、不可预测的输入时是鲁棒的。\n",
    "\n",
    "我的 FilterPy 库包含一个 H-Infinity 过滤器。 我在下面粘贴了一些测试代码，这些代码实现了上面文章中 Simon 设计的过滤器。 希望能帮助到你。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "81a73557",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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2BPB9cqrqqoirlpXVVWF9gePEVwx5lT+93//FwDw4osv9uj4Q4cORXp6OlauXIlJkybB4XDgtttuO6v/DQPV/PnzUVlZiS+//DJs+z333BN6X1paiuzsbEydOhX79+/HsGHD+rrMmFdUVIQdO3bAarXi7bffxrx586KuikRndqpejhkzhudlH+Lli4C0tDSo1eqIO7ubmpqQlZWlUFUDQ1JSUug/0dP5CZ6LPE97x9ChQ5GWlqbYuTpt2jSkpKRgzZo1WLNmDSZOnIjCwkIAQEZGBqZMmYI//vGPaGhoiPjdo0ePnvJ7x48fj4yMDLz66qtwuVyh7R999BF2796Na665BgCQnp6Oyy67DH/5y18ipqUJIQAACxYswL///W8AQHZ2dmi/0WiEECJsRRjAf25aLBbccsstePPNN7F8+fLQvwwNdgsWLMAHH3yADRs2IDc397RjJ02aBAD8c/QUdDodhg8fjnHjxmHZsmUYO3Ysnn/+eWRlZcHtdkc9L/lnZnSn6mU0PC97DwN6gE6nw7hx47B+/frQNp/Ph/Xr14fNvaKz197ejv3794f9ZU7nprCwEFlZWWHnqc1mw9atW3meyqC2thatra2KnatarRbXX3893nrrLWzdujV09TzopZdeghACpaWlWLRoEV577TU89dRTuOaaa057VV2r1eK//uu/UF5ejssvvxzPP/88Hn30Udx4440YMmQIfvGLX4TGvvDCCxBC4MILL8Sjjz6K1157DY899hi+853vYMGCBVi7di0efvjhiGNcfPHFAIB7770Xq1evxueff46qqiocPnwYkydPxo9//GO0tLRgw4YN+NGPfiRTx/onIUSol59//nnoX8JOZ8eOHQDAP0d7yOfzweVyYdy4cdBqtWF/ZnY/L+nMgr2MhudlL1Lu/tTYs3r1aqHX68Xy5cvFrl27xD333COSkpJEY2Oj0qX1K7/85S/Fxo0bRU1NjfjnP/8ppk2bJtLS0kRzc7PSpfULdrtdfPvtt+Lbb78VAMSzzz4rvv3229Cyd08//bRISkoS7733nigvLxezZ8/mMouncLpe2u128eCDD4rNmzeLmpoa8dlnn4kLL7xQjBgxImwZw762bt06AUBIkiSOHDkSsX///v3ixz/+scjKyhJarVbk5OSI733ve+Ltt98OjTl5FZegNWvWiO985ztCr9eLlJQU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\n",
      "text/plain": [
       "<Figure size 900x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from filterpy.hinfinity import HInfinityFilter\n",
    "\n",
    "dt = 0.1\n",
    "f = HInfinityFilter(2, 1, dim_u=1, gamma=.01)\n",
    "\n",
    "f.F = np.array([[1., dt],\n",
    "                [0., 1.]])\n",
    "\n",
    "f.H = np.array([[0., 1.]])\n",
    "f.G = np.array([[dt**2 / 2, dt]]).T\n",
    "\n",
    "f.P = 0.01\n",
    "f.W = np.array([[0.0003, 0.005],\n",
    "                [0.0050, 0.100]])/ 1000  #process noise\n",
    "\n",
    "f.V = 0.01\n",
    "f.Q = 0.01\n",
    "u = 1. #acceleration of 1 f/sec**2\n",
    "\n",
    "xs = []\n",
    "vs = []\n",
    "\n",
    "for i in range(1,40):\n",
    "    f.update (5)\n",
    "    #print(f.x.T)\n",
    "    xs.append(f.x[0,0])\n",
    "    vs.append(f.x[1,0])\n",
    "    f.predict(u=u)\n",
    "\n",
    "plt.subplot(211)\n",
    "plt.plot(xs)\n",
    "plt.title('position')\n",
    "plt.subplot(212)\n",
    "plt.plot(vs) \n",
    "plt.title('velocity');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0f9b2ffd",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
